import type { Router } from 'vue-router'
import { useUserStore } from '@/stores/user'
import { useSystemStore } from '@/stores/system'
import logger, { logRouteChange } from '@/utils/logger'

export function setupRouterGuards(router: Router) {
  // 全局前置守卫
  router.beforeEach((to, from, next) => {
    const userStore = useUserStore()
    const systemStore = useSystemStore()
    
    // 显示加载状态
    systemStore.setLoading(true)
    
    // 记录路由变化
    logRouteChange(to, from)
    
    // 检查是否需要认证（开发环境跳过检查）
    const needAuth = import.meta.env.PROD && !to.meta?.noAuth && !userStore.isAuthenticated
    if (needAuth) {
      logger.warn('未登录用户尝试访问需要认证的页面:', to.path)
      next('/login')
      return
    }
    
    // 检查权限
    if (to.meta?.requirePermission) {
      const hasPermission = userStore.hasPermission(to.meta.requirePermission as string)
      if (!hasPermission) {
        logger.warn('用户权限不足:', { 
          user: userStore.userInfo?.username,
          required: to.meta.requirePermission,
          path: to.path 
        })
        next('/404')
        return
      }
    }
    
    next()
  })
  
  // 全局后置守卫
  router.afterEach((to, from, failure) => {
    const systemStore = useSystemStore()
    
    // 隐藏加载状态
    systemStore.setLoading(false)
    
    if (failure) {
      logger.error('路由导航失败:', failure)
      return
    }
    
    // 更新页面标题
    const title = to.meta?.title as string
    if (title) {
      document.title = `${title} - CRM旅游管理系统`
    }
    
    // 移动端自动收起侧边栏
    if (systemStore.isMobile) {
      systemStore.setSidebarCollapsed(true)
    }
    
    logger.debug('路由导航完成:', {
      path: to.path,
      name: to.name,
      title: title
    })
  })
  
  // 路由错误处理
  router.onError((error) => {
    logger.error('路由错误:', error)
    
    // 显示错误提示
    if (window.ElMessage) {
      window.ElMessage.error('页面加载失败，请刷新重试')
    }
  })
  
  logger.info('路由守卫已设置')
}